import * as XLSX from "xlsx";
// import { saveAs } from "file-saver";

export function exportXlsxFile(oriData, template, fileName, type) {
  try {
    // 创建标题数组
    const headers = Object.values(template);

    // 创建数据数组
    const data = oriData.map((obj) =>
      headers.map(
        (header) =>
          obj[Object.keys(template).find((key) => template[key] === header)]
      )
    );

    // 合并标题和数据
    const output = [headers, ...data];

    // 使用 XLSX 工具将数据转换为工作表
    const ws = XLSX.utils.aoa_to_sheet(output);

    // 设置第一行的字体样式为加粗
    const range = XLSX.utils.decode_range(ws["!ref"]);
    for (let C = range.s.c; C <= range.e.c; ++C) {
      const address = XLSX.utils.encode_col(C) + "1"; // 1表示第一行
      if (!ws[address]) continue;
      ws[address].s = {
        font: {
          bold: true,
        },
      };
    }

    if (type == "report") {
      // 设置列的宽度
      ws["!cols"] = [
        { wch: 30 }, // 第一列的宽度
        { wch: 20 }, // 第二列的宽度
        { wch: 80 }, // 第三列的宽度
        { wch: 80 }, // 第四列的宽度
      ];
      ws["!rows"] = output.map(() => {
        return { hpx: 80 };
      });
    } else if (type == "words") {
      // 设置列的宽度
      ws["!cols"] = [
        { wch: 30 }, // 第一列的宽度
        { wch: 30 }, // 第二列的宽度
        { wch: 30 }, // 第三列的宽度
      ];
    }

    // 将工作表添加到工作簿
    const wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, "Sheet1");

    // 使用 XLSX 写入工作簿并保存为 Blob
    return XLSX.write(wb, { bookType: "xlsx", type: "binary" });

    // return new Blob([buffer], { type: "application/octet-stream" });
    // 使用 file-saver 保存 Blob
    // saveAs(
    //   new Blob([buffer], { type: "application/octet-stream" }),
    //   `${fileName}.xlsx`
    // );
  } catch (error) {
    console.log("exportXlsxFeil error:", error);
  }
}
